In task-based systems, short-lived tasks run in the context of applications distributed over network computing nodes, such as game servers. Each computing node has it own scheduler that determines how to allocate the node's available computing resources among tasks from different applications running on that node. Once a task is started, it runs to completion. The rate at which tasks are generated by an application on a given node is correlated with the number of “local” application users on that node and to a smaller extent with the number of “remote” users logged into other instances of that application on other network nodes. The expected execution time for a task from user j on node N depends on the number of users on node N with whom user j is currently interacting and on the number of users on all other nodes with whom user j is currently interacting.
Each application has a queue to hold those tasks generated by the application, but not yet scheduled for execution on a node. The scheduler has algorithms that implement policies to ensure a certain amount of the computing resources of the node is available to each application running on the node. Examples of scheduling algorithms include: scheduling applications tasks in a round-robin fashion; creating fixed resource partitions for all applications; and allocating “tickets” to each application at a certain fixed rate, which is determined by the network administrator, and “charging” each application a certain number of tickets for scheduling each of its tasks. While these example scheduling algorithms work towards ensuring a certain amount of computing resources are available to each application running on a node, the scheduling algorithms fail to optimize user experience (e.g., in terms of user perceived response time) in distributed network-based applications (e.g., network games). Consequently, there is a need in the art for a system and method for scheduling application tasks in a way that optimizes user experience.